package com.hucc.sqlitedemo;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by l on 2017/5/8.
 */

public class DbManager {

    private static SQLiteHelper mIntance;

    public static SQLiteHelper getIntance(Context context) {
        if (mIntance == null){
            mIntance = new SQLiteHelper(context);
        }
        return mIntance;
    }

    public static void execSQL(SQLiteDatabase db, String sql) {
        if (db != null){
            if (sql != null && !"".equals(sql)){
                db.execSQL(sql);
            }
        }
    }

    /**
     * 根据sql语句查询获得cursor对象
     * @param db 数据库对象
     * @param sql 查询sql的语句
     * @param selectionArgs 查询条件的占位符
     * @return 查询结果
     */
    public static Cursor selectDataSql(SQLiteDatabase db, String sql, String[] selectionArgs) {
        Cursor cursor = null;
        if (db!=null){
            cursor = db.rawQuery(sql,selectionArgs);
        }
        return cursor;
    }

    /**
     * 将查询的cursor对象转换成list集合
     * @param cursor 游标对象
     * @return 集合对象
     */
    public static List<Person> cursorToList(Cursor cursor) {
        List<Person> list = new ArrayList<>();
        // moveToNext() 如果返回true 表示下一条纪录存在  否则表示游标中数据读取完毕
        while (cursor.moveToNext()){
            String _id = cursor.getString(cursor.getColumnIndex(Constant._ID)); // getColumnIndex(String）根据参数中指定的字段名称获取字段下标
            String name = cursor.getString(cursor.getColumnIndex(Constant.NAME));
            String phone = cursor.getString(cursor.getColumnIndex(Constant.PHONE));

            Person person = new Person(_id, name, phone);
            list.add(person);
        }
        return list;
    }

    /**
     * 根据数据库以及数据表名称获取表中数据总条目
     *
     *  id 数据库对象
     *   tableName 数据表名称
     *   数据总条目
     */
    public static int getDataCount(SQLiteDatabase db, String tableName){
        int count = 0;
        if (db != null){
            Cursor cursor = db.rawQuery("select * from "+tableName, null);
            count = cursor.getCount(); // 获取cursor中的数据总数
        }
        return count;
    }

    /**
     * 根据当前页码查询获取该页码对应的聚合数据
     * @param db  数据库对象
     * @param tableName  数据表名称
     * @param currentPage  当前页码
     * @return  当前页对应的集合
     *
     *  select * from person ?,?  如何根据当前页码获取该页数据
     */
    public static List<Person> getListByCurrentPage(SQLiteDatabase db, String tableName, int currentPage, int pageSize){
        int index = (currentPage-1)*pageSize; // 获取当前页码第一条数据的下标
        Cursor cursor = null;
        if (db != null){
            String sql = "select * from "+tableName+" limit ?,?";
            cursor = db.rawQuery(sql, new String[]{index+"", pageSize+""});
        }
        return cursorToList(cursor);
    }
}
